home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / Warp3D_Devel / Include / Warp3D / Warp3D.h
Encoding:
C/C++ Source or Header  |  2001-05-10  |  34.4 KB  |  801 lines

  1. /*
  2. **
  3. ** Include file for the Warp3D API
  4. ** $VER: Warp3D.h 1.0 (20.05.98)
  5. **
  6. **
  7. ** This file is part of the Warp3D Project.
  8. ** Warp3D is copyrighted
  9. ** (C) 1998 Sam Jordan, Hans-Jörg Frieden, Thomas Frieden
  10. ** All rights reserved
  11. **
  12. ** See the documentation for conditions.
  13. **
  14. */
  15. #ifndef _WARP3D_WARP3D_H
  16. #define _WARP3D_WARP3D_H
  17.  
  18. #include <exec/types.h>
  19. #include <exec/lists.h>
  20. #include <exec/nodes.h>
  21. #include <exec/libraries.h>
  22. #include <utility/tagitem.h>
  23. #include <graphics/gfx.h>
  24. #include <graphics/displayinfo.h>
  25.  
  26. typedef short W3D_Bool;
  27. typedef float W3D_Float;
  28. typedef double W3D_Double;
  29.  
  30. #ifndef W3D_TRUE
  31. #define W3D_TRUE 1
  32. #endif
  33. #ifndef W3D_FALSE
  34. #define W3D_FALSE 0
  35. #endif
  36.  
  37. #if defined(__GNUC__)
  38. #define PACKED __attribute__ ((packed))
  39. #else
  40. #define PACKED
  41. #endif
  42.  
  43.  
  44. typedef struct
  45. {
  46.     W3D_Float r, g, b, a;       /* RGBA values in range [0..1] */
  47. }
  48. W3D_Color;
  49.  
  50. typedef struct
  51. {
  52.     W3D_Float r, g, b;          /* RGB values in range [0..1] */
  53. }
  54. W3D_ColorRGB;
  55.  
  56. typedef struct
  57. {
  58.     W3D_Float x, y;             /* window coordinates */
  59.     W3D_Double z;               /* z koordinate. Double precision for 32bit
  60.                    zbuffers */
  61.     W3D_Float w;                /* w koordinate. */
  62.     W3D_Float u, v, tex3d;      /* u/v koordinates, and an additional for 3d
  63.                    textures */
  64.     W3D_Color color;            /* vertex color */
  65.     W3D_ColorRGB spec;          /* specular lighting color */
  66.     W3D_Float l;                /* Lambda value for Mipmapping. Private right 
  67.                    now */
  68. }
  69. W3D_Vertex;
  70.  
  71. typedef struct
  72. {
  73.     struct Node link;           /* linkage, used by Warp3D itself */
  74.     W3D_Bool resident;          /* TRUE, if texture is on card */
  75.     W3D_Bool mipmap;            /* TRUE, if mipmaps are supported */
  76.     W3D_Bool dirty;             /* TRUE, if texture image was changed */
  77.     W3D_Bool matchfmt;          /* TRUE, if srcfmt = destfmt */
  78.     W3D_Bool reserved1;
  79.     W3D_Bool reserved2;
  80.     ULONG mipmapmask PACKED;    /* which mipmaps have to be generated */
  81.     void *texsource PACKED;     /* texture source image */
  82.     void *mipmaps[16] PACKED;   /* mipmap images */
  83.     int texfmtsrc PACKED;       /* texture format (from W3D_ATO_FORMAT) */
  84.     ULONG *palette PACKED;      /* texture palette for chunky textures */
  85.     void *texdata PACKED;       /* texture data converted */
  86.     void *texdest PACKED;       /* texture location on card */
  87.     int texdestsize PACKED;     /* size of VRAM allocation */
  88.     int texwidth PACKED;        /* texture width in pixels */
  89.     int texwidthexp PACKED;     /* texture width exponent */
  90.     int texheight PACKED;       /* texture width in pixels */
  91.     int texheightexp PACKED;    /* texture width exponent */
  92.     int bytesperpix PACKED;     /* bytes per pixel */
  93.     int bytesperrow PACKED;     /* bytes per row */
  94.     void *driver PACKED;        /* insert driver specific data here */
  95. }
  96. W3D_Texture;
  97.  
  98. typedef struct
  99. {
  100.     W3D_Vertex v1;              /* vertex */
  101.     W3D_Texture *tex;           /* texture */
  102.     W3D_Float pointsize;        /* point diameter */
  103. }
  104. W3D_Point;
  105.  
  106. typedef struct
  107. {
  108.     W3D_Vertex v1, v2;          /* vertices for line drawing */
  109.     W3D_Texture *tex;           /* texture */
  110.     W3D_Float linewidth;        /* line width */
  111.     W3D_Bool st_enable;         /* stippling enable */
  112.     unsigned short st_pattern;  /* stippling pattern */
  113.     int st_factor;              /* stippling factor */
  114. }
  115. W3D_Line;
  116.  
  117.  
  118. typedef struct
  119. {                               /* V2 only */
  120.     int vertexcount;            /* Number of vertices */
  121.     W3D_Vertex *v;              /* An array of at least two vertices */
  122.     W3D_Texture *tex;           /* texture */
  123.     W3D_Float linewidth;        /* line width */
  124.     W3D_Bool st_enable;         /* stippling enable */
  125.     unsigned short st_pattern;  /* stippling pattern */
  126.     int st_factor;              /* stippling factor */
  127. }
  128. W3D_Lines;
  129.  
  130. typedef struct
  131. {
  132.     W3D_Vertex v1, v2, v3;      /* three vertices for triangle drawing */
  133.     W3D_Texture *tex;           /* texture */
  134.     unsigned char *st_pattern;  /* stippling pattern */
  135. }
  136. W3D_Triangle;
  137.  
  138. typedef struct
  139. {
  140.     W3D_Vertex *v1, *v2, *v3;   /* Three vertex POINTERS */
  141.     W3D_Texture *tex;           /* see above */
  142.     unsigned char *st_pattern;  /* See above */
  143. }
  144. W3D_TriangleV;
  145.  
  146. typedef struct
  147. {
  148.     int vertexcount;            /* number of vertices */
  149.     W3D_Vertex *v;              /* an array of at least 3 vertices */
  150.     W3D_Texture *tex;           /* texture */
  151.     unsigned char *st_pattern;  /* stippling pattern */
  152. }
  153. W3D_Triangles;
  154.  
  155. typedef struct
  156. {
  157.     int vertexcount;            /* number of vertices */
  158.     W3D_Vertex **v;             /* Pointer to an array of pointers ! */
  159.     W3D_Texture *tex;           /* Texture */
  160.     unsigned char *st_pattern;  /* Stippling pattern */
  161. }
  162. W3D_TrianglesV;
  163.  
  164. typedef struct
  165. {
  166.     W3D_Float fog_start;        /* start of fogging zone */
  167.     W3D_Float fog_end;          /* end of fogging area */
  168.     W3D_Float fog_density;      /* fog density for exp. fogging */
  169.     W3D_ColorRGB fog_color;     /* fog color */
  170. }
  171. W3D_Fog;
  172.  
  173. typedef struct
  174. {
  175.     int left;                   /* left offset of clipping area */
  176.     int top;                    /* top offset of clipping area */
  177.     int width;                  /* width of clipping area */
  178.     int height;                 /* height of clipping area */
  179. }
  180. W3D_Scissor;
  181.  
  182. typedef struct
  183. {
  184.     short type;                 /* Type of this entry */
  185.     short length;               /* Length of the entry, including this struct 
  186.                  */
  187.     ULONG state;                /* State longword */
  188. }
  189. W3D_QHead;
  190.  
  191. typedef struct
  192. {
  193.     UBYTE *data;                /* Pointer to data area */
  194.     ULONG size;                 /* Size of the data block */
  195.     UBYTE *current;             /* Current insertion position */
  196. }
  197. W3D_Queue;
  198.  
  199. #define QEMPTY(x) ( (x)->data == (x)->current )
  200.  
  201. /* The maximum number of texture mapping units (TMU) supported by Warp3D right now */
  202. #define W3D_MAX_TMU         16L     /* be prepared that this might grow */
  203.  
  204. /* The context structure is private, and should not be accessed in any
  205.    way by Warp3D applications, with the following exceptions:
  206.  
  207.    The following fields are READ-ONLY:
  208.    format, bprow, width, height, depth, drawmem
  209.  
  210.  */
  211. typedef struct
  212. {
  213.     void *driver;               /* insert driver specific data here */
  214.     void *gfxdriver;            /* usable by the GFXdriver */
  215.     int drivertype;             /* driver type (3DHW / CPU) */
  216.     void *regbase;              /* register base */
  217.     void *vmembase;             /* video memory base */
  218.     void *zbuffer;              /* Pointer to the Z buffer */
  219.     void *stencilbuffer;        /* Pointer to the stencil buffer */
  220.     ULONG state;                /* hardware state (see below) */
  221.     struct BitMap *drawregion;  /* destination bitmap */
  222.     ULONG supportedfmt;         /* bitmask with all supported dest fmt */
  223.     ULONG format;               /* bitmap format (see below) */
  224.     int yoffset;                /* Y-Offset (for ScrollVPort-Multibuf.) */
  225.     int bprow;                  /* bytes per row */
  226.     int width;                  /* bitmap width */
  227.     int height;                 /* bitmap height */
  228.     int depth;                  /* bitmap depth */
  229.     W3D_Bool chunky;            /* TRUE, if palettized screen mode */
  230.     W3D_Bool destalpha;         /* TRUE, if dest alpha channel available */
  231.     W3D_Bool zbufferalloc;      /* TRUE, is Z buffer is allocated */
  232.     W3D_Bool stbufferalloc;     /* TRUE, is stencil buffer is allocated */
  233.     W3D_Bool HWlocked;          /* TRUE, if 3D HW was locked */
  234.     W3D_Bool w3dbitmap;         /* TRUE, if drawregion points to a W3D_Bitmap 
  235.                  */
  236.     W3D_Bool zbufferlost;       /* TRUE, if zbuffer not reallocatable */
  237.     W3D_Bool reserved3;
  238.     struct MinList restex;      /* A list of all resident textures, used for
  239.                    LRU implementation */
  240.     struct MinList tex;         /* A list of all textures which are not on
  241.                    card */
  242.     int maxtexwidth;            /* -HJF- replaced these for possible */
  243.     int maxtexheight;           /* support of non-square textures */
  244.     int maxtexwidthp;           /* -HJF- For hardware that has different */
  245.     int maxtexheightp;          /* constaints in perspective mode */
  246.     W3D_Scissor scissor;        /* scissor region */
  247.     W3D_Fog fog;                /* fogging parameters */
  248.     ULONG envsupmask;           /* Mask of supported envmodes */
  249.     W3D_Queue *queue;           /* queue to buffer drawings */
  250.     void *drawmem;              /* base address for drawing operations */
  251.     ULONG globaltexenvmode;     /* Global texture environment mode */
  252.     W3D_Float globaltexenvcolor[4];     /* global texture env color */
  253.     struct Library *DriverBase; /* Library base of the active driver */
  254.     ULONG EnableMask;           /* Mask for enable-able states */
  255.     ULONG DisableMask;          /* Mask for disable-able states */
  256.     ULONG CurrentChip;          /* Chip constant */
  257.     ULONG DriverVersion;        /* Internal driver version */
  258.     /* --- NEW for V4 ------------------------------------------------------------*/
  259.     /* Vertex pointer */
  260.     void *VertexPointer;        /* Pointer to the vertex buffer array */
  261.     int  VPStride;              /* Stride of vertex array */
  262.     ULONG VPMode;               /* Vertex buffer format */
  263.     ULONG VPFlags;              /* not yet used */
  264.     /* TexCoord pointer */
  265.     void *TexCoordPointer[W3D_MAX_TMU];
  266.                 /* Pointer to each TMU's texture coordinate array */
  267.     int   TPStride[W3D_MAX_TMU]; /* Stride of TexCoordPointers */
  268.     W3D_Texture *CurrentTex[W3D_MAX_TMU];
  269.                 /* Pointer to each TMU's texture object */
  270.     int   TPVOffs[W3D_MAX_TMU]; /* Offset to V coordinate */
  271.     int   TPWOffs[W3D_MAX_TMU]; /* Offset to W coordinate */
  272.     int   TPFlags[W3D_MAX_TMU]; /* Flags */
  273.     /* Color Pointer */
  274.     void *ColorPointer;         /* Pointer to the color array */
  275.     int   CPStride;             /* Color pointer stride */
  276.     ULONG CPMode;               /* Mode and color format */
  277.     ULONG CPFlags;              /* not yet used */
  278.     ULONG FrontFaceOrder;       /* Winding order of front facing triangles */
  279. }
  280. W3D_Context;
  281.  
  282.  
  283. typedef struct
  284. {
  285.     int bprow;                  /* Bytes per row */
  286.     int width;                  /* Width */
  287.     int height;                 /* Height */
  288.     ULONG format;               /* Destination color format */
  289.     void *dest;                 /* Pointer to destination */
  290. }
  291. W3D_Bitmap;
  292.  
  293. typedef struct
  294. {                               /* V2 only */
  295.     ULONG ChipID;               /* One of W3D_CHIP_??? below */
  296.     ULONG formats;              /* Bitmask of supported formats */
  297.     char *name;                 /* Name of the chip/driver */
  298.     W3D_Bool swdriver;          /* W3D_TRUE -> CPU-Driver */
  299. }
  300. W3D_Driver;
  301.  
  302. /* W3D_ScreenMode structure */
  303. typedef struct
  304. {
  305.     ULONG ModeID;               /* ModeID for OpenScreen */
  306.     ULONG Width, Height;        /* Width and Height for visible screen */
  307.     ULONG Depth;                /* Pixel Depth */
  308.     char DisplayName[DISPLAYNAMELEN];   /* readable name of this display mode 
  309.                      */
  310.     W3D_Driver *Driver PACKED;  /* Matching driver for this mode */
  311.     void *Next PACKED;          /* Next W3D_ScreenMode in list */
  312. }
  313. W3D_ScreenMode;
  314.  
  315.  
  316. /* Tags for W3D_CreateContext */
  317.  
  318. #define W3D_CC_TAGS             (TAG_USER+0x200000)
  319. #define W3D_CC_BITMAP           (W3D_CC_TAGS+0)         /* destination bitmap 
  320.                              */
  321. #define W3D_CC_YOFFSET          (W3D_CC_TAGS+1)         /* y-Offset */
  322. #define W3D_CC_DRIVERTYPE       (W3D_CC_TAGS+2)         /* see below */
  323. #define W3D_CC_W3DBM            (W3D_CC_TAGS+3)         /* Use W3D_Bitmap
  324.                                instead of struct
  325.                                BitMap */
  326. #define W3D_CC_INDIRECT         (W3D_CC_TAGS+4)         /* Indirect drawing */
  327. #define W3D_CC_GLOBALTEXENV     (W3D_CC_TAGS+5)         /* SetTexEnv is
  328.                                global */
  329. #define W3D_CC_DOUBLEHEIGHT     (W3D_CC_TAGS+6)         /* Drawing area has
  330.                                double height */
  331. #define W3D_CC_FAST             (W3D_CC_TAGS+7)         /* Allow Warp3D to
  332.                                modify passed
  333.                                Triangle/Lines/Points 
  334.                              */
  335. #define W3D_CC_MODEID           (W3D_CC_TAGS+8)         /* Specify modeID to
  336.                                use */
  337.  
  338. /* driver types. These are used as flags for W3D_CreateContext and as bitmask
  339.    for W3D_CheckDriver. It is also used by W3DHW_GetDriverInfo and in the
  340.    element 'drivertype' in the context structure */
  341.  
  342. #define W3D_DRIVER_UNAVAILABLE  (1<<0)  /* driver unavailable */
  343. #define W3D_DRIVER_BEST         (1<<1)  /* use best mode */
  344. #define W3D_DRIVER_3DHW         (1<<2)  /* use 3D-HW */
  345. #define W3D_DRIVER_CPU          (1<<3)  /* use CPU */
  346.  
  347. /*  Chip constants returned e.g. by W3D_GetDrivers. These can be
  348.    used to identify the chip that is active/available.
  349.    You may not, however, make any assumtions about the capabilities
  350.    of the driver based on this constant, since some features might be
  351.    emulated.
  352.    Strictly for informational/internal uses.
  353.  */
  354.  
  355. #define W3D_CHIP_UNKNOWN        1
  356. #define W3D_CHIP_VIRGE          2
  357. #define W3D_CHIP_PERMEDIA2      3
  358. #define W3D_CHIP_VOODOO1        4
  359. #define W3D_CHIP_AVENGER        5       /* a.k.a. The Voodoo 3 */
  360.  
  361. /* Tags for W3D_AllocTexObj */
  362.  
  363. #define W3D_ATO_TAGS            (TAG_USER+0x201000)
  364. #define W3D_ATO_IMAGE           (W3D_ATO_TAGS+0)        /* texture image */
  365. #define W3D_ATO_FORMAT          (W3D_ATO_TAGS+1)        /* source format */
  366. #define W3D_ATO_WIDTH           (W3D_ATO_TAGS+2)        /* border width */
  367. #define W3D_ATO_HEIGHT          (W3D_ATO_TAGS+3)        /* border height */
  368. #define W3D_ATO_MIPMAP          (W3D_ATO_TAGS+4)        /* mipmap mask */
  369. #define W3D_ATO_PALETTE         (W3D_ATO_TAGS+5)        /* texture palette */
  370. #define W3D_ATO_MIPMAPPTRS      (W3D_ATO_TAGS+6)        /* array of
  371.                                user-supplied
  372.                                mipmaps */
  373.  
  374. /* Possible modes for SetFrontFace */
  375. #define W3D_CW                  0                       /* Front face is clockwise */
  376. #define W3D_CCW                 1                       /* Front face is counter clockwise */
  377.  
  378. /* possible values for W3D_ATO_FORMAT  and W3D_GetTexFmtInfo */
  379. /* a = alpha, r = red, g = green, b = blue, l = luminance, i = intensity */
  380.  
  381. #define W3D_CHUNKY              1       /* palettized */
  382. #define W3D_A1R5G5B5            2       /* a rrrrr ggggg bbbbb */
  383. #define W3D_R5G6B5              3       /* rrrrr gggggg bbbbb */
  384. #define W3D_R8G8B8              4       /* rrrrrrrr gggggggg bbbbbbbb */
  385. #define W3D_A4R4G4B4            5       /* aaaa rrrr gggg bbbb */
  386. #define W3D_A8R8G8B8            6       /* aaaaaaaa rrrrrrrr gggggggg
  387.                        bbbbbbbb */
  388. #define W3D_A8                  7       /* aaaaaaaa */
  389. #define W3D_L8                  8       /* llllllll */
  390. #define W3D_L8A8                9       /* llllllll aaaaaaaa */
  391. #define W3D_I8                 10       /* iiiiiiii */
  392. #define W3D_R8G8B8A8           11       /* rrrrrrrr gggggggg bbbbbbbb
  393.                        aaaaaaaa */
  394.  
  395. /* return values of W3D_GetTexFmtInfo (bitmask) */
  396.  
  397. #define W3D_TEXFMT_SUPPORTED    (1<<0)  /* format is supported, although it
  398.                        may be converted */
  399. #define W3D_TEXFMT_FAST         (1<<16)         /* format directly supported
  400.                            by 3D HW */
  401. #define W3D_TEXFMT_CLUTFAST     (1<<17)         /* format is directly
  402.                            supported on LUT8 screens */
  403. #define W3D_TEXFMT_ARGBFAST     (1<<18)         /* format is directly
  404.                            supported on 16/24 bit
  405.                            screens */
  406. #define W3D_TEXFMT_UNSUPPORTED  (1<<1)  /* this format is unsupported, and
  407.                        can't be simulated */
  408.  
  409. /* bitmap format flags used by CPU drivers */
  410.  
  411. #define W3D_FMT_CLUT            (1<<0)  /* chunky */
  412. #define W3D_FMT_R5G5B5          (1<<1)  /* 0 rrrrr ggggg bbbbb */
  413. #define W3D_FMT_B5G5R5          (1<<2)  /* 0 bbbbb ggggg rrrrr */
  414. #define W3D_FMT_R5G5B5PC        (1<<3)  /* ggg bbbbb 0 rrrrr gg */
  415. #define W3D_FMT_B5G5R5PC        (1<<4)  /* ggg rrrrr 0 bbbbb gg */
  416. #define W3D_FMT_R5G6B5          (1<<5)  /* rrrrr gggggg bbbbb */
  417. #define W3D_FMT_B5G6R5          (1<<6)  /* bbbbb gggggg rrrrr */
  418. #define W3D_FMT_R5G6B5PC        (1<<7)  /* ggg bbbbb rrrrr ggg */
  419. #define W3D_FMT_B5G6R5PC        (1<<8)  /* ggg rrrrr bbbbb ggg */
  420. #define W3D_FMT_R8G8B8          (1<<9)  /* rrrrrrrr gggggggg bbbbbbbb */
  421. #define W3D_FMT_B8G8R8          (1<<10)         /* bbbbbbbb gggggggg rrrrrrrr 
  422.                          */
  423. #define W3D_FMT_A8R8G8B8        (1<<11)         /* aaaaaaaa rrrrrrrr gggggggg 
  424.                            bbbbbbbb */
  425. #define W3D_FMT_A8B8G8R8        (1<<12)         /* aaaaaaaa bbbbbbbb gggggggg 
  426.                            rrrrrrrr */
  427. #define W3D_FMT_R8G8B8A8        (1<<13)         /* rrrrrrrr gggggggg bbbbbbbb 
  428.                            aaaaaaaa */
  429. #define W3D_FMT_B8G8R8A8        (1<<14)         /* bbbbbbbb gggggggg rrrrrrrr 
  430.                            aaaaaaaa */
  431.  
  432. /* possible mode values for W3D_SetState/W3D_GetState and for 'state' in the
  433.    context structure */
  434.  
  435. #define W3D_AUTOTEXMANAGEMENT   (1<<1)  /* automatic texture management */
  436. #define W3D_SYNCHRON            (1<<2)  /* wait, until HW is idle */
  437. #define W3D_INDIRECT            (1<<3)  /* drawing is queued until flushed */
  438. #define W3D_GLOBALTEXENV        (1<<4)  /* SetTexEnv is global */
  439. #define W3D_DOUBLEHEIGHT        (1<<5)  /* Drawing area is double height */
  440. #define W3D_FAST                (1<<6)  /* Allow Warp3D to modify passed
  441.                        Triangles/Points/Lines */
  442. #define W3D_AUTOCLIP            (1<<7)  /* clip to screen region */
  443.  
  444. #define W3D_TEXMAPPING          (1<<8)  /* texmapping state */
  445. #define W3D_PERSPECTIVE         (1<<9)  /* perspective correction state */
  446. #define W3D_GOURAUD             (1<<10)         /* gouraud/flat shading */
  447. #define W3D_ZBUFFER             (1<<11)         /* Z-Buffer state */
  448. #define W3D_ZBUFFERUPDATE       (1<<12)         /* Z-Buffer update state */
  449. #define W3D_BLENDING            (1<<13)         /* Alpha blending state */
  450. #define W3D_FOGGING             (1<<14)         /* Fogging state */
  451. #define W3D_ANTI_POINT          (1<<15)         /* Point antialiasing state */
  452. #define W3D_ANTI_LINE           (1<<16)         /* Line antialiasing state */
  453. #define W3D_ANTI_POLYGON        (1<<17)         /* Polygon antialiasing state 
  454.                          */
  455. #define W3D_ANTI_FULLSCREEN     (1<<18)         /* Fullscreen antialiasing
  456.                            state */
  457. #define W3D_DITHERING           (1<<19)         /* dithering state */
  458. #define W3D_LOGICOP             (1<<20)         /* logic operations */
  459. #define W3D_STENCILBUFFER       (1<<21)         /* stencil buffer/stencil
  460.                            test */
  461. #define W3D_ALPHATEST           (1<<22)         /* alpha test */
  462. #define W3D_SPECULAR            (1<<23)         /* Specular lighting */
  463. #define W3D_TEXMAPPING3D        (1<<24)         /* 3d textures */
  464. #define W3D_SCISSOR             (1<<25)         /* Scissor test enable */
  465. #define W3D_CHROMATEST          (1<<26)         /* Chroma test enable */
  466. #define W3D_CULLFACE            (1<<27)         /* Backface culling enable */
  467.  
  468. /* action/result values for W3D_SetState/W3D_GetState */
  469.  
  470. #define W3D_ENABLE              1       /* enable mode */
  471. #define W3D_ENABLED             1       /* mode is enabled */
  472. #define W3D_DISABLE             2       /* disable mode */
  473. #define W3D_DISABLED            2       /* mode is disabled */
  474.  
  475. /* mode parameters for W3D_Query */
  476.  
  477. #define W3D_Q_DRAW_POINT        1       /* point drawing */
  478. #define W3D_Q_DRAW_LINE         2       /* line drawing */
  479. #define W3D_Q_DRAW_TRIANGLE     3       /* triangle drawing */
  480. #define W3D_Q_DRAW_POINT_X      4       /* points with size != 1 supported */
  481. #define W3D_Q_DRAW_LINE_X       5       /* lines with width != 1 supported */
  482. #define W3D_Q_DRAW_LINE_ST      6       /* line stippling supported */
  483. #define W3D_Q_DRAW_POLY_ST      7       /* polygon stippling supported */
  484. #define W3D_Q_DRAW_POINT_FX     8       /* point drawing supports special fx */
  485. #define W3D_Q_DRAW_LINE_FX      9       /* line drawing supports speical fx */
  486. /* Note: more of these below */
  487.  
  488. #define W3D_Q_TEXMAPPING        11      /* texmapping in general */
  489. #define W3D_Q_MIPMAPPING        12      /* mipmapping */
  490. #define W3D_Q_BILINEARFILTER    13      /* bilinear filter */
  491. #define W3D_Q_MMFILTER          14      /* mipmap filter */
  492. #define W3D_Q_LINEAR_REPEAT     15      /* W3D_REPEAT for linear texmapping */
  493. #define W3D_Q_LINEAR_CLAMP      16      /* W3D_CLAMP for linear texmapping */
  494. #define W3D_Q_PERSPECTIVE       17      /* perspective correction */
  495. #define W3D_Q_PERSP_REPEAT      18      /* W3D_REPEAT for persp. texmapping */
  496. #define W3D_Q_PERSP_CLAMP       19      /* W3D_CLAMP for persp. texmapping */
  497. #define W3D_Q_ENV_REPLACE       20      /* texenv REPLACE */
  498. #define W3D_Q_ENV_DECAL         21      /* texenv DECAL */
  499. #define W3D_Q_ENV_MODULATE      22      /* texenv MODULATE */
  500. #define W3D_Q_ENV_BLEND         23      /* texenv BLEND */
  501. #define W3D_Q_WRAP_ASYM         24      /* texture wrapping asymetric in s
  502.                        and t direction */
  503. #define W3D_Q_SPECULAR          25      /* Specular hiliting */
  504. #define W3D_Q_BLEND_DECAL_FOG   26      /* driver supports alpha blending and 
  505.                        decal with fog */
  506. #define W3D_Q_TEXMAPPING3D      27      /* driver supports 3-dimensional
  507.                        (volumetric) textures */
  508. #define W3D_Q_CHROMATEST        28      /* driver supports chroma test */
  509.  
  510. #define W3D_Q_FLATSHADING       31      /* flat shading */
  511. #define W3D_Q_GOURAUDSHADING    32      /* gouraud shading */
  512.  
  513. #define W3D_Q_ZBUFFER           41      /* Z buffer in general */
  514. #define W3D_Q_ZBUFFERUPDATE     42      /* Z buffer update */
  515. #define W3D_Q_ZCOMPAREMODES     43      /* Z buffer compare modes */
  516.  
  517. #define W3D_Q_ALPHATEST         51      /* alpha test in general */
  518. #define W3D_Q_ALPHATESTMODES    52      /* alpha test modes */
  519.  
  520. #define W3D_Q_BLENDING          61      /* alpha blending */
  521. #define W3D_Q_SRCFACTORS        62      /* source factors */
  522. #define W3D_Q_DESTFACTORS       63      /* destination factors */
  523. #define W3D_Q_ONE_ONE           64      /* W3D_ONE / W3D_ONE supported */
  524.  
  525. #define W3D_Q_FOGGING           71      /* fogging in general */
  526. #define W3D_Q_LINEAR            72      /* linear fogging */
  527. #define W3D_Q_EXPONENTIAL       73      /* exponential fogging */
  528. #define W3D_Q_S_EXPONENTIAL     74      /* square exponential fogging */
  529. #define W3D_Q_INTERPOLATED      75      /* interpolated fog */
  530.  
  531. #define W3D_Q_ANTIALIASING      81      /* antialiasing in general */
  532. #define W3D_Q_ANTI_POINT        82      /* point antialiasing */
  533. #define W3D_Q_ANTI_LINE         83      /* line antialiasing */
  534. #define W3D_Q_ANTI_POLYGON      84      /* polygon antialiasing */
  535. #define W3D_Q_ANTI_FULLSCREEN   85      /* full screen antialiasing */
  536.  
  537. #define W3D_Q_DITHERING         91      /* dithering */
  538. #define W3D_Q_PALETTECONV       92      /* driver can use per-texture
  539.                        palettes on 8bit screens */
  540.  
  541. #define W3D_Q_SCISSOR           101     /* scissor test */
  542.  
  543. #define W3D_Q_MAXTEXWIDTH       111     /* max. texture border width */
  544. #define W3D_Q_MAXTEXHEIGHT      112     /* max. texture border height */
  545. #define W3D_Q_MAXTEXWIDTH_P     113     /* max. texture border width */
  546. #define W3D_Q_MAXTEXHEIGHT_P    114     /* max. texture border height */
  547. #define W3D_Q_RECTTEXTURES      115     /* rectangular texture supported */
  548.  
  549. #define W3D_Q_LOGICOP           121     /* logical operation */
  550.  
  551. #define W3D_Q_MASKING           131     /* color/index masking */
  552.  
  553. #define W3D_Q_STENCILBUFFER     141     /* stencil buffer in general */
  554. #define W3D_Q_STENCIL_MASK      142     /* mask value */
  555. #define W3D_Q_STENCIL_FUNC      143     /* stencil functions */
  556. #define W3D_Q_STENCIL_SFAIL     144     /* stencil operation SFAIL */
  557. #define W3D_Q_STENCIL_DPFAIL    145     /* stencil operation DPFAIL */
  558. #define W3D_Q_STENCIL_DPPASS    146     /* stencil operation DPPASS */
  559. #define W3D_Q_STENCIL_WRMASK    147     /* stencil buffer supports write
  560.                        masking */
  561.  
  562. #define W3D_Q_DRAW_POINT_TEX    160     /* point drawing supports textures */
  563. #define W3D_Q_DRAW_LINE_TEX     161     /* line drawing supports textures */
  564.  
  565. #define W3D_Q_CULLFACE          162     /* driver supports backface culling */
  566.  
  567.  
  568. /* results of W3D_Query (if a result-set is expected) */
  569.  
  570. #define W3D_FULLY_SUPPORTED     3       /* completely supported */
  571. #define W3D_PARTIALLY_SUPPORTED 4       /* partially supported */
  572. #define W3D_NOT_SUPPORTED       5       /* not supported */
  573.  
  574. /* blending modes used for alpha blending (the comment shows for
  575.    which function [source or destination] the mode can be used) */
  576.  
  577. #define W3D_ZERO                1       /* source + dest */
  578. #define W3D_ONE                 2       /* source + dest */
  579. #define W3D_SRC_COLOR           3       /* dest only */
  580. #define W3D_DST_COLOR           4       /* source only */
  581. #define W3D_ONE_MINUS_SRC_COLOR 5       /* dest only */
  582. #define W3D_ONE_MINUS_DST_COLOR 6       /* source only */
  583. #define W3D_SRC_ALPHA           7       /* source + dest */
  584. #define W3D_ONE_MINUS_SRC_ALPHA 8       /* source + dest */
  585. #define W3D_DST_ALPHA           9       /* source + dest */
  586. #define W3D_ONE_MINUS_DST_ALPHA 10      /* source + dest */
  587. #define W3D_SRC_ALPHA_SATURATE  11      /* source only */
  588. #define W3D_CONSTANT_COLOR      12
  589. #define W3D_ONE_MINUS_CONSTANT_COLOR 13
  590. #define W3D_CONSTANT_ALPHA      14
  591. #define W3D_ONE_MINUS_CONSTANT_ALPHA 15
  592.  
  593. /* texture filter. Only W3D_NEAREST and W3D_LINEAR can be used for
  594.    magnification filters! */
  595.  
  596. #define W3D_NEAREST             1       /* no mipmapping, no filtering */
  597. #define W3D_LINEAR              2       /* no mipmapping, bilinear filtering */
  598. #define W3D_NEAREST_MIP_NEAREST 3       /* mipmapping, no filtering */
  599. #define W3D_NEAREST_MIP_LINEAR  4       /* mipmapping, bilinear filtering */
  600. #define W3D_LINEAR_MIP_NEAREST  5       /* filtered mipmapping, no filtering */
  601. #define W3D_LINEAR_MIP_LINEAR   6       /* mipmapping, trilinear filtering */
  602.  
  603. /* fog modes */
  604.  
  605. #define W3D_FOG_LINEAR          1       /* linear fogging */
  606. #define W3D_FOG_EXP             2       /* exponential fogging */
  607. #define W3D_FOG_EXP_2           3       /* square exponential fogging */
  608. #define W3D_FOG_INTERPOLATED    4       /* interpolated fogging */
  609.  
  610. /* texture environment parameters */
  611.  
  612. #define W3D_REPLACE             1       /* unlit texturing */
  613. #define W3D_DECAL               2       /* RGB: same as W3D_REPLACE RGBA: use 
  614.                        alpha to blend texture with
  615.                        primitive (lit-texturing) */
  616. #define W3D_MODULATE            3       /* lit-texturing by modulation */
  617. #define W3D_BLEND               4       /* blend with environment color */
  618.  
  619. /* texture wrapping parameters */
  620.  
  621. #define W3D_REPEAT              1       /* texture is repeated */
  622. #define W3D_CLAMP               2       /* texture is clamped */
  623.  
  624. /* alpha test compare modes */
  625.  
  626. #define W3D_A_NEVER             1       /* discard incoming pixel */
  627. #define W3D_A_LESS              2       /* draw, if value < refvalue */
  628. #define W3D_A_GEQUAL            3       /* draw, if value >= refvalue */
  629. #define W3D_A_LEQUAL            4       /* draw, if value <= refvalue */
  630. #define W3D_A_GREATER           5       /* draw, if value > refvalue */
  631. #define W3D_A_NOTEQUAL          6       /* draw, if value != refvalue */
  632. #define W3D_A_EQUAL             7       /* draw, if value == refvalue */
  633. #define W3D_A_ALWAYS            8       /* always draw */
  634.  
  635. /* Z buffer compare modes */
  636.  
  637. #define W3D_Z_NEVER             1       /* discard incoming pixel */
  638. #define W3D_Z_LESS              2       /* draw, if value < Z(Z_Buffer) */
  639. #define W3D_Z_GEQUAL            3       /* draw, if value >= Z(Z_Buffer) */
  640. #define W3D_Z_LEQUAL            4       /* draw, if value <= Z(Z_Buffer) */
  641. #define W3D_Z_GREATER           5       /* draw, if value > Z(Z_Buffer) */
  642. #define W3D_Z_NOTEQUAL          6       /* draw, if value != Z(Z_Buffer) */
  643. #define W3D_Z_EQUAL             7       /* draw, if value == Z(Z_Buffer) */
  644. #define W3D_Z_ALWAYS            8       /* always draw */
  645.  
  646. /* logical operation modes */
  647.  
  648. #define W3D_LO_CLEAR            1       /* dest = 0 */
  649. #define W3D_LO_AND              2       /* dest = source & dest */
  650. #define W3D_LO_AND_REVERSE      3       /* dest = source & !dest */
  651. #define W3D_LO_COPY             4       /* dest = source */
  652. #define W3D_LO_AND_INVERTED     5       /* dest = !source & dest */
  653. #define W3D_LO_NOOP             6       /* dest = dest */
  654. #define W3D_LO_XOR              7       /* dest = source ^ dest */
  655. #define W3D_LO_OR               8       /* dest = source | dest */
  656. #define W3D_LO_NOR              9       /* dest = !(source | dest) */
  657. #define W3D_LO_EQUIV            10      /* dest = !(source ^ dest) */
  658. #define W3D_LO_INVERT           11      /* dest = !dest */
  659. #define W3D_LO_OR_REVERSE       12      /* dest = source | !dest */
  660. #define W3D_LO_COPY_INVERTED    13      /* dest = !source */
  661. #define W3D_LO_OR_INVERTED      14      /* dest = !source | dest */
  662. #define W3D_LO_NAND             15      /* dest = !(source & dest) */
  663. #define W3D_LO_SET              16      /* dest = 1 */
  664.  
  665. /* stencil test functions */
  666.  
  667. #define W3D_ST_NEVER            1       /* don't draw pixel */
  668. #define W3D_ST_ALWAYS           2       /* draw always */
  669. #define W3D_ST_LESS             3       /* draw, if refvalue < ST */
  670. #define W3D_ST_LEQUAL           4       /* draw, if refvalue <= ST */
  671. #define W3D_ST_EQUAL            5       /* draw, if refvalue == ST */
  672. #define W3D_ST_GEQUAL           6       /* draw, if refvalue >= ST */
  673. #define W3D_ST_GREATER          7       /* draw, if refvalue > ST */
  674. #define W3D_ST_NOTEQUAL         8       /* draw, if refvalue != ST */
  675.  
  676. /* stencil test operations */
  677.  
  678. #define W3D_ST_KEEP             1       /* keep stencil buffer value */
  679. #define W3D_ST_ZERO             2       /* clear stencil buffer value */
  680. #define W3D_ST_REPLACE          3       /* replace by reference value */
  681. #define W3D_ST_INCR             4       /* increment */
  682. #define W3D_ST_DECR             5       /* decrement */
  683. #define W3D_ST_INVERT           6       /* invert bitwise */
  684.  
  685. /* chroma test modes */
  686.  
  687. #define W3D_CHROMATEST_NONE      1      /* No chroma test */
  688. #define W3D_CHROMATEST_INCLUSIVE 2      /* texels in the range pass the test */
  689. #define W3D_CHROMATEST_EXCLUSIVE 3      /* texels in the range are rejected */
  690.  
  691. /* error/status values */
  692.  
  693. #define W3D_SUCCESS              0      /* success */
  694. #define W3D_BUSY                -1      /* graphics hardware is busy */
  695. #define W3D_ILLEGALINPUT        -2      /* failure, illegal input */
  696. #define W3D_NOMEMORY            -3      /* no memory available */
  697. #define W3D_NODRIVER            -4      /* no hardware driver available */
  698. #define W3D_NOTEXTURE           -5      /* texture is missing */
  699. #define W3D_TEXNOTRESIDENT      -6      /* texture not resident */
  700. #define W3D_NOMIPMAPS           -7      /* mipmaps are not supported by this
  701.                        texture object */
  702. #define W3D_NOGFXMEM            -8      /* no graphics memory available */
  703. #define W3D_NOTVISIBLE          -9      /* drawing area not visible/ bitmap
  704.                        swapped out */
  705. #define W3D_UNSUPPORTEDFILTER   -10     /* unsupported filter */
  706. #define W3D_UNSUPPORTEDTEXENV   -11     /* unsupported filter */
  707. #define W3D_UNSUPPORTEDWRAPMODE -12     /* unsupported wrap mode */
  708. #define W3D_UNSUPPORTEDZCMP     -13     /* unsupported Z compare mode */
  709. #define W3D_UNSUPPORTEDATEST    -14     /* unsupported alpha test */
  710. #define W3D_UNSUPPORTEDBLEND    -15     /* unsupported blending function */
  711. #define W3D_UNSUPPORTEDFOG      -16     /* unsupported fog mode */
  712. #define W3D_UNSUPPORTEDSTATE    -17     /* can't enable/disable state */
  713. #define W3D_UNSUPPORTEDFMT      -18     /* unsupported bitmap format */
  714. #define W3D_UNSUPPORTEDTEXSIZE  -19     /* unsupported texture border size */
  715. #define W3D_UNSUPPORTEDLOGICOP  -20     /* unsupported logical operation */
  716. #define W3D_UNSUPPORTEDSTTEST   -21     /* unsupported stencil test */
  717. #define W3D_ILLEGALBITMAP       -22     /* illegal bitmap */
  718. #define W3D_NOZBUFFER           -23     /* Z buffer is missing/unavailable */
  719. #define W3D_NOPALETTE           -24     /* Palette missing for chunky
  720.                        textures */
  721. #define W3D_MASKNOTSUPPORTED    -25     /* color/index masking not supported */
  722. #define W3D_NOSTENCILBUFFER     -26     /* Stencil buffer is
  723.                        missing/unavailable */
  724. #define W3D_QUEUEFAILED         -27     /* The request can not be queued */
  725. #define W3D_UNSUPPORTEDTEXFMT   -28     /* Texformat unsupported */
  726. #define W3D_WARNING             -29     /* Parital success */
  727. #define W3D_UNSUPPORTED           -30   /* Requested feature is unsupported */
  728.  
  729. /* Hints */
  730.  
  731. #define W3D_H_TEXMAPPING        1       /* Quality of general texture mapping 
  732.                      */
  733. #define W3D_H_MIPMAPPING        2       /* Quality of mipmapping */
  734. #define W3D_H_BILINEARFILTER    3       /* Quality of bilinear filtering */
  735. #define W3D_H_MMFILTER          4       /* Quality of depth filter */
  736. #define W3D_H_PERSPECTIVE       5       /* Quality of perspective correction */
  737. #define W3D_H_BLENDING          6       /* Quality of alpha blending */
  738. #define W3D_H_FOGGING           7       /* Quality of fogging */
  739. #define W3D_H_ANTIALIASING      8       /* Quality of antialiasing */
  740. #define W3D_H_DITHERING         9       /* Quality of dithering */
  741. #define W3D_H_ZBUFFER          10       /* Quality of zbuffering */
  742. #define W3D_H_POINTDRAW        11
  743.  
  744. /* Quality parameters */
  745.  
  746. #define W3D_H_FAST              1       /* Low quality, fast rendering */
  747. #define W3D_H_AVERAGE           2       /* Medium quality and speed */
  748. #define W3D_H_NICE              3       /* Best quality, low speed */
  749.  
  750. /* ScreenMode Requester TagItems */
  751.  
  752. #define W3D_SMR_TAGS        (TAG_USER+0x202000)
  753. #define W3D_SMR_DRIVER      (W3D_SMR_TAGS+0)    /* Driver to filter */
  754. #define W3D_SMR_DESTFMT     (W3D_SMR_TAGS+1)    /* Dest Format to filter */
  755. #define W3D_SMR_TYPE        (W3D_SMR_TAGS+2)    /* Type to filter */
  756. #define W3D_SMR_SIZEFILTER  (W3D_SMR_TAGS+3)    /* Also filter size */
  757. #define W3D_SMR_MODEMASK    (W3D_SMR_TAGS+4)    /* AND-Mask for modes */
  758.  
  759. /* BestModeID tag items */
  760.  
  761. #define W3D_BMI_TAGS        (TAG_USER+0x203000)
  762. #define W3D_BMI_DRIVER      (W3D_BMI_TAGS+0)
  763. #define W3D_BMI_WIDTH       (W3D_BMI_TAGS+1)
  764. #define W3D_BMI_HEIGHT      (W3D_BMI_TAGS+2)
  765. #define W3D_BMI_DEPTH       (W3D_BMI_TAGS+3)
  766.  
  767. /* Vertex Buffer defines */
  768. #define W3D_VERTEX_F_F_F    0
  769. #define W3D_VERTEX_F_F_D    1
  770. #define W3D_VERTEX_D_D_D    2
  771.  
  772. /* Color Buffer defines */
  773. #define W3D_COLOR_FLOAT     (0x01<<30)
  774. #define W3D_COLOR_UBYTE     (0x02<<30)
  775.  
  776. #define W3D_CMODE_RGB       0x01
  777. #define W3D_CMODE_BGR       0x02
  778. #define W3D_CMODE_RGBA      0x04
  779. #define W3D_CMODE_ARGB      0x08
  780. #define W3D_CMODE_BGRA      0x10
  781.  
  782. /* Primitive types for W3D_DrawArray/W3D_DrawElements */
  783. #define W3D_PRIMITIVE_TRIANGLES         0
  784. #define W3D_PRIMITIVE_TRIFAN            1
  785. #define W3D_PRIMITIVE_TRISTRIP          2
  786. #define W3D_PRIMITIVE_POINTS            3
  787. #define W3D_PRIMITIVE_LINES             4
  788. #define W3D_PRIMITIVE_LINELOOP          5
  789. #define W3D_PRIMITIVE_LINESTRIP         6
  790.  
  791. /* Index array layout */
  792. #define W3D_INDEX_UBYTE                 0
  793. #define W3D_INDEX_UWORD                 1
  794. #define W3D_INDEX_ULONG                 2
  795.  
  796. /* TexCoordArray flags */
  797. #define W3D_TEXCOORD_NORMALIZED         (1L<<0)     /* Texture coordinates are normalized */
  798.  
  799.  
  800. #endif
  801.